﻿/**
 * Classe permettant d'afficher des messages à l'utilisateur
 *
 * Utilise les notifications avec les timeout
 */
var Message = function(txt, displaytime, options)
{
	/**
	 * Le texte ou la page HTML à afficher
	 */
	var _text;
	/**
	 * La durée en millisecondes du message
	 */
	var _displaytime;
	/**
	 * Le titre du message
	 */
	var _title;
	/**
	 * L'icone du message
	 */
	var _icon;
	
	/**
	 * Si c'est un lien HTML ou non
	 */
	var _isHTML;
	
	/**
	 * L'objet Notification associé
	 */
	var _notification;
	
	/**
	 * Affiche la notification à l'utilisateur
	 */
	this.show = function()
	{
		// Si c'est un message classique, prise en compte de l'icone, du message et du titre
		if (!_isHTML)
		{
			_notification = webkitNotifications.createNotification(
			  _icon,  // icon url - can be relative
			  _title,  // notification title
			  _text  // notification body text
			);
		}
		// Sinon, juste le lien
		else
		{
			_notification = webkitNotifications.createHTMLNotification(_text);			
		}
		
		// Affichage de la notification
		_notification.show();
		
		// Mise en place du timer s'il ne vaut pas 0
		if (_displaytime != 0)
			window.setTimeout(_timeoutClose,_displaytime);
		
	};
	
	/**
	 * Supprime le message de l'affichage
	 */
	this.close = function()
	{
		_closeMessage();
	};
	
	/**
	 * Ecouteur déclenché à la fin du timeout de la durée de l'affichage.
	 *
	 * Supprime le message de l'affichage
	 */
	function _timeoutClose()
	{
		_closeMessage();
	};
	
	/**
	 * Supprime le message de l'affichage
	 */
	function _closeMessage()
	{
		_notification.cancel();
	};
	
	/**
	 * Fonction utilitaire "isset", permettant de déterminer si une variable est définie
	 *
	 * @param {var} v la variable à tester
	 * @return {bool} true si elle est définie, false sinon
	 */
	function _isset(v)
	{
		if (typeof(v) == "undefined")
			return false;
		else
			return true;
	}
	
	/**
	 * Constructeur de la classe
	 * Les options possibles sont:
	 * - title: le titre du message (String). Par défault: "message"
	 * - icon: l'icône à afficher (String). Par défault: "icon.png"
	 * - html: à mettre à "true" si le message est une page HTML. Par défault: false
	 *
	 * @param {String} txt le message ou la page HTML à afficher
	 * @param {int} displaytime la durée en millisecondes de l'affichage du message. 0 pour qu'il soit affiché constamment. Default: 3000
	 * @param {Object} options Les options du message
	 * 
	 */
	function _construct(txt, displaytime, options)
	{
		_text = txt;
		
		// La durée
		if (typeof(displaytime) == "undefined")
			_displaytime = 3000;
		else
			_displaytime = displaytime;
		
		// Titre du message
		_title = "Message";
		// Icône
		_icon = "icon.png";
		// Message HTML
		_isHTML = false;
		
		// Récupération des options
		if (typeof(options) == "object")
		{
			if (_isset(options.title))
				_title = options.title;
			if (_isset(options.icon))
				_icon = options.icon;
			if (_isset(options.html))
				_isHTML = options.html;
		}

	}
	
	// Appel du constructeur
	_construct(txt, displaytime, options);
};